Conversation
|
I should not use |
|
Very promising. For the tests:
|
|
(I usually do the tests first. E.g what behavior do I even expect for all the cases. Do they all make sense in concerto.) |
|
Okay, I'edit the set up to use a function that calls both the interfaces
I'll also test non specs mocks
I'll try to implement it in TDD
I thought that if we use a set as a container for observed subjects we can not have problems with already registered objects and the scope of an InOrder object is just in a single test case |
mockito/mocking.py
Outdated
|
|
||
| def remember(self, invocation): | ||
| self.invocations.append(invocation) | ||
| self.notify() |
There was a problem hiding this comment.
it reads much better when we could do, for each observer. oberserver.notify(invocation). This is semantically equivalent to: for each observer. observer.remember(invocation). As if the invocations here are a specialized variant of it.
There was a problem hiding this comment.
Still: for each observer. observer.remember(invocation)
|
Yeah, that should probably not raise. Nesting should ideally work, we need to ensure instead that nesting works. |
|
Added a testing library to express better assertions with containers...I'm working in the various steps rye add --dev assertpy |
|
Generally, this project predates any of the modern tools, like rye, uv etc. Don't do these distracting things here. They don't help you implement the actual thing. For this new feature, just use pytest and plain asserts. You don't even need to subclass Already think about using |
I don't get it, Unit Tests should help me implementing the feature and serves other developers as a sort of documentation. Users should not reads our tests, but the documentation and the example in it (like doc tests). (In an extremis we can provide E2E tests with behave to get the high level functionality of a feature. Anyway the repo is your so I'll do what you want. I'll remove the dependency, use dumb mock, inline everything (no setup like xUnit) and write the tests just with documentation purpuse |
|
@kaste Hello, what do you think? Do you think that we should support a workflow like this?: a = mock()
b = mock()
when(a).method().thenReturn("Calling a")
when(b).other_method().thenReturn("Calling b")
in_order: InOrder = InOrder([a,b])
a.method()
b.other_method()
a.method()
in_order.verify(a).method()
in_order.verify(b).other_method()
in_order.verify(a).method()For now it is not supported. Best regards |
|
Isn't that the meat of the re-implementation of InOrder? The old InOrder supported only one mock, and your implementation supports proper cross-mock interactions? |
26ca517 to
70a7c8a
Compare
|
I pushed master to update to modern tooling ( |
My implementation supports cross-mock interaction like in_order.verify(cat).meow()
in_order.verify(dof).bark()but doesn't yet supports an interaction of this type: in_order.verify(cat).meow()
in_order.verify(dof).bark()
in_order.verify(cat).meow()Where a mock method is called twice (or more) in different orders.
I'll looking into that |
|
@kaste I' happy with the implementation and tests. Let me know if you need any changes or some documentation to put in the docs with examples (and how you wanted). P.S. |
mockito/inorder.py
Outdated
| def mocks(self): | ||
| return self._mocks | ||
|
|
||
| def update(self, subject: Mock) -> None: |
There was a problem hiding this comment.
-> remember(self, invocation: RealInvocation) -> None
mockito/inorder.py
Outdated
| :param subject: subject to be added to the list of ordered invocation | ||
| """ | ||
| self.ordered_invocations.append( | ||
| (subject, subject.invocations[-1]) |
There was a problem hiding this comment.
subject would have been too generic anyway, but subject.invocations[-1] is an implementation detail. Just pass the invocation in. self.invocations: deque[RealInvocations]
mockito/mocking.py
Outdated
| RealInvocation = Union[ | ||
| invocation.RememberedInvocation, | ||
| invocation.RememberedProxyInvocation | ||
| ] |
There was a problem hiding this comment.
RealInvocation is actually defined in invocation.py
tests/in_order_test.py
Outdated
| a = mock() | ||
| b = mock() |
There was a problem hiding this comment.
Don't use a and b as names. Use cat and dog or some other names.
|
Difficult to think this through... The standard verify should be supported at least. |
66f219a to
07df123
Compare
07df123 to
cfe9508
Compare
Co-authored-by: Christian Mancini <mancinichristian00@gmail.com>
... still doesn't make a good error message
cfe9508 to
6d5ec3e
Compare
c38f692 to
d5dd049
Compare
This is the PR for #98.
The idea is to make
Mockobservable so we can register ordered invocations from different mocks.The
mocking_registryhelps to get the mocks for comparing.Features
InOrderobject to register the order of invocationsShould work with spy objects (Maybe in an other PR)@kaste Feel free to add elements to this list